#include "pthread.h"
#include "stdio.h"
#include "app_common.h"
#include "unistd.h"
#include "stdlib.h"
int num_square(int n)
{
    sleep(1); // 模拟耗时操作
    return n * n;
}
void *num_sqr_thread(void *arg)
{
    sleep(1);
    // 1.先强转为int*
    int *num_p = (int *)arg;
    // 2.解引用
    int num = *num_p;
    // 3.创建一个int*  开辟堆空间
    int *result_p = (int *)malloc(sizeof(int));
    // 4.计算平方，将结果存入堆空间
    *result_p = num * num;
    // 5.返回结果
    return result_p;
}

int main(int argc, char const *argv[])
{
    long start_time = app_common_get_curtime_ts();
    // 定义一个数组
    int numbers[5] = {1, 2, 3, 4, 5};
    int results[5];
    // 创建5个线程
    pthread_t threads[5];

    for (size_t i = 0; i < 5; i++)
    {
        // results[i] = num_square(numbers[i]);
        // 创建线程
        pthread_create(&threads[i], NULL, num_sqr_thread, &numbers[i]);
    }
    for (size_t i = 0; i < 5; i++)
    {
        void *result_p;
        // 获取线程结果
        pthread_join(threads[i], &result_p);
        // 将结果转换为int*
        int *result = (int *)result_p;
        // 解引用
        results[i] = *result;
    }

    // 累加
    int sum = 0;
    for (size_t i = 0; i < 5; i++)
    {
        sum += results[i];
    }
    printf("sum = %d\n", sum);
    printf("time_end = %ld\n", app_common_get_curtime_ts() - start_time);

    return 0;
}
